package com.instance.demo3;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public class Student extends Person<Test,Student,Test2>{
	
	/**
	 * 测试通过反射获取泛型类
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {
		Student st = new Student();
		Class<? extends Student> clazz = st.getClass();
		System.out.println(clazz);
		//获取该类的父类
		Class<?> supclazz = clazz.getSuperclass();
		System.out.println(supclazz);
		//获取带有泛型的父类
		//Type 是所有java编程语言中所有类型的公共高级接口，包括原始类型、参数化类型、数组类型、类型变量和基本类型。		
		Type type = clazz.getGenericSuperclass();
		System.out.println(type);
		//ParameterizedType参数化类型，即泛型
		ParameterizedType p = (ParameterizedType)type;
		//getActualTypeArguments获取参数化类型的数组，泛型可能有多个
		Type[] param = p.getActualTypeArguments();
		System.out.println(param.length);
		Class c = (Class) param[0];
		System.out.println(c);
		Test test = st.getModule();
		System.out.println(test.getColumn());
	}

}
